/*
  title: Funções xmlHTTPRequest
    Funções para se trabalhar com o xmlHTTPRequest

Autor: Marcos José Setim
Versão: 1.6
Criada em: 08 Maio 2005
Brought up date: 20 Abril 2006
*/

/*
    function: checkXMLHTTP()
      Verifica se  o XMLHTTP é suportado, caso seja retorna o object

    returns:

       false - Não suportado

       object = object do xmlhttpRequest
*/
function checkXMLHTTP()
{
    var xmlhttp = false;

    if (window.XMLHttpRequest)
    { // if Mozilla, Safari etc
        xmlhttp = new XMLHttpRequest()
    }
    else if (window.ActiveXObject)
    { // if IE
        try 
        {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")
        }
        catch (e)
        {
            try
            {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch (e)
            {}
        }
    }

   /*
   Verifica se foi possível instanciar o object do XML
   o typeof verifica o tipo de dado do operador
   */
    if (!xmlhttp && typeof XMLHttpRequest!='undefined')
    {
      xmlhttp = new XMLHttpRequest();
    }

    if(!xmlhttp)
    {
    return false;
    }
    else
    {
    return xmlhttp;
    }
}

/*
    function: orderPost
        Efetua um order post para o servidor
    
    parameters:
        
       object: 
        
            oXMLHttp - object do XMLHTTPRequest
       
       strings:
        
            sUrl - Endereço da página
            sMyQuery - Query do endereço
            
       function:
        
            functionReply - Function que tratará do fluxo dos dados recebidos
       
       boolean:
        
            bSync - Define se o order será sincrono ou assincrono
            
       return: boolean
*/
function orderPost( oXMLHttp, sUrl, sMyQuery, functionReply, bSync )
{
    var setRequest = typeof(oXMLHttp.setRequestHeader); // Necessário suporte a setRequestHeader
    
    if ( !bSync )
        bSync = true;

    // Verifica se o XMLHTTP é suportado pelo browser
    if ( oXMLHttp && setRequest!="undefined" )
    {         
        oXMLHttp.open("POST", sUrl, bSync);
        
        // Define o cabeçalho para metodo POST
        oXMLHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        //oXMLHttp.setRequestHeader('Content-length', sMyQuery.length);
        //oXMLHttp.setRequestHeader('Connection','close');

		// Manipulating of events that goes off one 
		// definitive event in the state change		
		
        oXMLHttp.onreadystatechange = functionReply;
        oXMLHttp.send(sMyQuery); // Envia a requisição   
		
        return true; // Sucesso
    }
    else
    {
        return false; // Erro
    }
}

/*
    function: orderGet
        Efetua um order get para o servidor
    
    parameters:
        
       object: 
        
            oXMLHttp - object do XMLHTTPRequest
       
       strings:
        
            sUrl - Endereço da página
            
       function:
        
            functionReply - Function que tratará do fluxo dos dados recebidos
       
       boolean:
        
            bSync - Define se o order será sincrono ou assincrono
            
       return: boolean
*/
function orderGet( oXMLHttp, sUrl, functionReply, bSync )
{
    if ( !bSync )
        bSync = true;

    // Verifica se o XMLHTTP é suportado pelo browser
    if ( oXMLHttp )
    {         
        oXMLHttp.open("GET", sUrl, true)
        // Manipulador de eventos que dispara um
        // determinado evento na mudança de State
        oXMLHttp.onreadystatechange = functionReply
        oXMLHttp.send(null) // Envia a requisição

        return true; // Sucesso
    }
    else
    {
         return false; // Erro
    }
}

/*
    function:
        Function General para chegar o State Current de um order

    parameters:
        
        object: object que está realizando o order atua

    returns:

        1 - Sucesso ao carregar a página
        404 - Página não encontrada
        0 - Erro ao carregar a página
*/
function arriveState( oOrder )
{
    /*
    notes:

    Status do Ready State:
    0 - Enviando order
    1 - Carregando Reply
    2 - Reposta carregada
    3 - Reply pronta    
    4 - Reply O.K
    */
    if(oOrder.readyState == 4)
    {
        if(oOrder.status == 200)
        {
            return true; // Página carregada com sucesso
        }
        else if( oOrder.status == 404 )
        {
            return 404; // Página não encontrada
        }
        else
        {
            return 0; // Erro desconhecido ao recuperar a página
        }
    }
}

function selectLanguage()
{
    send( 'selectLanguagef' );
}

/*
topic: Exemplo de uso

var oXMLHttp = checkXMLHTTP();
    
function functionReply()
{
    if ( arriveState( oXMLHttp ) )
    {
        alert( oXMLHttp.responseText );
    }
}

orderGet( oXMLHttp, 'http://www.meusite.com', functionReply );
*/
